home *** CD-ROM | disk | FTP | other *** search
/ Amiga Packmags / NewsFlash - Issue 10 (1990)(UGA - NewsFlash UK)(Disk 1 of 2)[a3].zip / NewsFlash - Issue 10 (1990)(UGA - NewsFlash UK)(Disk 1 of 2)[a3].adf / sources / AmiTracker_v1.0.pp / AmiTracker_v1.0
Text File  |  1996-12-24  |  8KB  |  308 lines

  1. ********************************************************************
  2. *          Program to demonstrate use of Screens Windows           *
  3. *          Gadgets Menus etc to form a complete program            *
  4. *          shell.Compiles with Devpac V2                           *       
  5. *                          Part One                                *
  6. *                                                                  *
  7. *                 By S.Marshall for Newsflash UK                   *
  8. *                                                                  *
  9. ********************************************************************
  10.  
  11.     INCDIR         "SYS:INCLUDE/"
  12.     INCLUDE     Intuition/Intuition.i
  13.     INCLUDE     Intuition/Intuition_lib.i
  14.     INCLUDE        Graphics/Graphics_lib.i
  15.     INCLUDE        Graphics/View.I
  16.      INCLUDE     Exec/Exec_lib.i
  17.     INCLUDE        Exec/memory.i
  18.     INCLUDE        Exec/Libraries.i
  19.     INCLUDE        Libraries/Dos.i
  20.     INCLUDE        Libraries/Dos_lib.i
  21.     INCLUDE        Libraries/Dosextens.i
  22.     
  23. NULL    EQU    0
  24.  
  25. CALLSYS    MACRO
  26.     IFGT    NARG-1         
  27.     FAIL    !!!           
  28.     ENDC                 
  29.     JSR    _LVO\1(A6)
  30.     ENDM
  31.         
  32. ;*****************************************
  33.  
  34.     sub.l        a1,a1            ;clear a1
  35.     CALLEXEC    FindTask        ;find task - us
  36.     move.l        d0,a4            ;process in a4
  37.     move.l        d0,OurProc        ;save it for later
  38.  
  39.     tst.l        pr_CLI(a4)        ;test if from CLI
  40.     beq.s        Workbench        ;branch if from workbench
  41.     
  42.     bra.s        end_startup        ;and run the user prog
  43.  
  44. Workbench
  45.     lea        pr_MsgPort(a4),a0    ;tasks message port in a0
  46.     CALLSYS        WaitPort        ;wait for workbench message
  47.     lea        pr_MsgPort(a4),a0    ;tasks message port in a0
  48.     CALLSYS        GetMsg            ;get workbench message
  49.     move.l        d0,returnMsg        ;save it for later reply
  50.  
  51. end_startup
  52.     bsr.s        _main            ;call our program
  53.  
  54.     tst.l        returnMsg        ;test if from workbench
  55.     beq.s        exitToDOS        ;if I was a CLI
  56.  
  57.     CALLEXEC    Forbid            ;forbid multitasking
  58.     move.l        returnMsg(pc),a1    ;get workbench message
  59.     CALLSYS        ReplyMsg        ;reply workbench message
  60.  
  61. exitToDOS
  62.     moveq        #0,d0            ;flag no error
  63.     rts                    ;Quit our program
  64.  
  65. _main    
  66.     moveq        #0,d0            ;clear d0 (any lib version)
  67.       lea        DOSname(pc),a1        ;lib name ind a1
  68.       CALLEXEC    OpenLibrary        ;try to open library
  69.       move.l        d0,_DOSBase        ;store lib base
  70.       beq        Error            ;cleanup and quit if fail
  71.       
  72.       moveq        #0,d0            ;clear d0 (any lib version)
  73.       lea        Grafname(pc),a1        ;lib name ind a1
  74.       CALLSYS        OpenLibrary        ;try to open library
  75.       move.l        d0,_GfxBase        ;store lib base
  76.       beq        GfxError        ;cleanup and quit if fail
  77.       
  78.       moveq        #0,d0            ;clear d0 (any lib version)
  79.       lea        Intname(pc),a1        ;lib name ind a1
  80.       CALLSYS        OpenLibrary        ;try to open library
  81.       move.l        d0,_IntuitionBase    ;store lib base
  82.       beq        IntError        ;cleanup and quit if fail
  83.       
  84.       lea         NewScrn(pc),a0        ;NewScreen struct in a0
  85.       CALLINT     OpenScreen        ;try to open screen
  86.       move.l         d0,ScreenPtr        ;store screen pointer 
  87.       beq         CloseInt        ;cleanup and quit if fail
  88.     move.l        d0,a0            ;screen pointer in a0
  89.     lea        sc_ViewPort(a0),a0    ;screens viewport in a0
  90.     lea        Palette(pc),a1        ;Palette address in a1    
  91.     moveq        #8,d0            ;number of colours in d0
  92.     CALLGRAF    LoadRGB4        ;set screen colours
  93.       
  94.       lea         NewWdw(pc),a0        ;NewWindow stuct in a0
  95.       CALLINT     OpenWindow        ;try to open window
  96.       move.l         d0,WindowPtr        ;save pointer to window    
  97.       beq         ScreenClose        ;cleanup and quit if fail
  98.  
  99.     move.l        OurProc(pc),a0        ;process in a0
  100.     move.l        pr_WindowPtr(a0),OldWdw    ;store old pointer
  101.     move.l        WindowPtr(pc),pr_WindowPtr(a0) ;change to our pointer
  102.     
  103.       lea        ScreenImage(pc),a1    ;image struct in a1
  104.       bsr        Imagedraw        ;draw it
  105.  
  106.     move.l        #255,d7            ;index for loop
  107. Scroll
  108.     CALLGRAF    WaitTOF            ;use WaitTOF to slow down
  109.     moveq        #0,d0            ;not used - set to 0
  110.     move.l        #-1,d1            ;amount to move - 1 pixel up
  111.     move.l        ScreenPtr(pc),a0    ;pointer to screen to move
  112.     CALLINT        MoveScreen        ;move it
  113.     dbra        d7,Scroll        ;loop til finished
  114.  
  115.     move.l        WindowPtr(pc),d0    ;window in d0
  116.     bsr.s        Waitmouse        ;wait for let mouse down
  117.     
  118.       lea        AnalyzerImage(pc),a1    ;image struct in a1
  119.       bsr        Imagedraw        ;draw it
  120.  
  121. ;------ Temp code to test redirection of requesters and wait for mouse
  122.     
  123.     move.l        WindowPtr(pc),d0    ;window in d0
  124.     bsr.s        Waitmouse        ;wait for let mouse down
  125.     
  126.     move.l        #flname,d1
  127.     move.l        #MODE_OLDFILE,d2
  128.     CALLDOS        Open
  129.  
  130. ;------ end of temp code
  131.  
  132. WindowClose  
  133.       move.l        OurProc(pc),a0        ;process in a0
  134.       move.l        OldWdw(pc),pr_WindowPtr(a0) ;restore old pointer
  135.       
  136.       move.l         WindowPtr(pc),a0    ;window in a0
  137.       CALLINT     CloseWindow        ;close it
  138.   
  139. ScreenClose
  140.       move.l         ScreenPtr(pc),a0    ;screen in a0
  141.       CALLSYS     CloseScreen        ;close it
  142.  
  143. CloseInt:  
  144.       move.l         _IntuitionBase(pc),a1    ;intuition lib base in a1
  145.       CALLEXEC     CloseLibrary        ;close intuition
  146.  
  147. IntError
  148.     move.l         _GfxBase(pc),a1        ;graphics lib base in a1
  149.       CALLEXEC     CloseLibrary        ;close graphics
  150.       
  151. GfxError
  152.     move.l         _DOSBase(pc),a1        ;DOS lib base in a1
  153.       CALLEXEC     CloseLibrary        ;close DOS
  154.   
  155. Error
  156.     rts                    ;quit
  157.     
  158. ********************************************************************
  159. ; Subroutine to wait (legally) for the left mouse button
  160. ; Waitmouse  (Window)   (no return value)
  161. ;        d0
  162.       
  163. Waitmouse:
  164.     movem.l        a5-a6,-(sp)        ;store a5 and a6
  165.     move.l         d0,a5            ;window address in d0
  166.       move.l         wd_UserPort(a5),a5    ;userport address in a5
  167. .Loop
  168.       move.l         a5,a0            ;userport in a0
  169.      CALLEXEC     WaitPort        ;wait for message
  170.       move.l         a5,a0            ;userport in a0
  171.       CALLSYS        GetMsg            ;get the message
  172.       tst         d0            ;test result
  173.       beq.s         .Loop             ;try again if fail
  174.       move.l         d0,a1            ;message in a1
  175.       cmp.l         #MOUSEBUTTONS,im_Class(a1) ;is it mousebuttons
  176.     bne.s        .Reply            ;if not reply and try again
  177.     cmp.w        #SELECTDOWN,im_Code(a1)    ;if yes is it Selectdown
  178.     beq.s        .MBPressed        ;if yes reply message and rts
  179. .Reply    
  180.       CALLSYS        ReplyMsg        ;reply to message
  181.       bra.s         .Loop            ;loop back always
  182. .MBPressed
  183.       CALLSYS        ReplyMsg        ;reply message
  184.     movem.l        (sp)+,a5-a6        ;restore a5 and a6
  185.     rts                    ;return
  186.  
  187. ; Subroutine to render an image into window
  188.  
  189. Imagedraw:
  190.     move.l        a6,-(sp)    ;save a6
  191.     move.l         WindowPtr(pc),a0 ;address of Window in a0
  192.       move.l         wd_RPort(a0),a0    ;Windows rastport in a0
  193.       moveq         #0,D0        ;no left offset
  194.       moveq         #0,D1        ;no top offset
  195.       CALLINT     DrawImage    ;draw the image
  196.       move.l        (sp)+,a6    ;restore a6
  197.       rts
  198.  
  199. ;===============================================================
  200. ; NewScreen and NewWindow structures
  201.  
  202. NewScrn 
  203.       dc.w         0,256        ;X and Y co-ords of top left
  204.       dc.w         320,256     ;Size of screen
  205.       dc.w        4        ;Depth (number of bitplanes) 
  206.       dc.b         0,1        ;colours to use for border etc
  207.       dc.w         NULL        ;Viewmodes
  208.       dc.w         CUSTOMSCREEN    ;we are using a custom screen (=15)
  209.       dc.l         Font80        ;make sure we get the correct font
  210.       dc.l         ScreenTitle    ;Pointer to screen title
  211.       dc.l         NULL        ;Gadgets (none yet)
  212.       dc.l         NULL        ;Custom bitmap (none)
  213.      EVEN
  214.   
  215. ScreenTitle
  216.     dc.b         "AmiTracker",0
  217.       EVEN
  218.       
  219. Font80:    dc.l        FontName
  220.     dc.w        8
  221.     dc.b        0
  222.     dc.b        0
  223.     
  224. FontName:
  225.     dc.b        "topaz.font",0
  226.     EVEN      
  227.     
  228. NewWdw 
  229.       dc.w         0,10
  230.       dc.w         320,246
  231.       dc.b         -1,-1
  232.       dc.l         GADGETDOWN|GADGETUP|MOUSEBUTTONS|RAWKEY|MENUPICK
  233.       dc.l         SMART_REFRESH|BACKDROP|BORDERLESS|ACTIVATE
  234.       dc.l         NULL
  235.       dc.l         NULL
  236.       dc.l         NULL
  237. ScreenPtr
  238.       dc.l         NULL
  239.       dc.l         NULL
  240.       dc.w         NULL,NULL
  241.       dc.w         NULL,NULL
  242.       dc.w         CUSTOMSCREEN
  243.       
  244. ;------ Data for palette
  245. Palette:
  246.     dc.w    $000
  247.     dc.w    $ccc
  248.     dc.w    $444
  249.     dc.w    $fd0
  250.     dc.w    $777
  251.     dc.w    $f00
  252.     dc.w    $aaa
  253.     dc.w    $666
  254.     
  255. ;------ Image Structures for display
  256. ScreenImage:
  257.  
  258.     dc.w         0,0        ;left, top
  259.     dc.w        320,246        ;width, height
  260.     dc.w        2        ;depth
  261.     dc.l        Image1Data    ;image data
  262.     dc.b        6,0        ;plane pick,plane on/off
  263.     dc.l        NULL        ;next image
  264.     
  265. AnalyzerImage:
  266.  
  267.     dc.w         126,47        ;left, top
  268.     dc.w        194,52        ;width, height
  269.     dc.w        2        ;depth
  270.     dc.l        Image2Data    ;image data
  271.     dc.b        6,0        ;plane pick,plane on/off
  272.     dc.l        NULL        ;next image
  273.  
  274. _DOSBase
  275.     dc.l        0    ;storage for DOS lib pointer
  276. _GfxBase
  277.     dc.l        0    ;storage for Graphics lib pointer
  278. _IntuitionBase
  279.     dc.l        0    ;storage for Intuition lib pointer
  280. OurProc:
  281.     dc.l        0    ;storage for ptr to process
  282. OldWdw:
  283.     dc.l        0    ;storage for old pr_WindowPtr
  284. WindowPtr
  285.     dc.l        0    ;storage for window structure pointer 
  286. returnMsg:
  287.     dc.l        0    ;storage for workbench message
  288.  
  289. DOSname
  290.     DOSNAME            ;macro for DOS lib name
  291. Grafname
  292.     GRAFNAME        ;macro for Graphics lib name
  293. Intname
  294.     INTNAME            ;macro for Intuition lib name
  295.  
  296. ;------ temp filename for testing purposes    
  297. flname:    dc.b    'Test:1',0
  298.     
  299. ;===============================================================
  300.         SECTION    GraphicData,DATA_C
  301. Image1Data:
  302.     INCBIN    Df0:source/Sreendata    ;load data for screen image
  303.     
  304. Image2Data:
  305.     INCBIN    Df0:source/sa.data    ;load data for Analyzer image
  306.  
  307.  
  308.